import { app, BrowserWindow, dialog, ipcMain } from "electron";
import path from "path";
import * as fs from 'fs';

    // app模块控制应用程序的事件生命周期。
// BrowserWindow模块创建和管理应用程序窗口。

export default class Main{

    private mainWindow:BrowserWindow = null;

    /** 创建窗口 */
    public createWindow() {   
        this.mainWindow = new BrowserWindow({
            width: 1920,        // 整数型 (可选) - 窗口的宽度（以像素为单位）。 默认值为 800。
            height: 1080,        // 整数型 (可选) - 窗口的高度（以像素为单位）。 默认值为 600。
            resizable: false,   // boolean (可选) - 窗口大小是否可调整。 默认值为 true。
            fullscreen: false,   // boolean (可选) - 窗口是否全屏. 当明确设置为 false 时，在 macOS 上全屏的按钮将被隐藏或禁用. 默认值为 false.
            title: "编辑器",      // string(可选) - 默认窗口标题 默认为"Electron"。 如果由loadURL()加载的HTML文件中含有标签<title>，此属性将被忽略。
            // icon: "gubi.png",        // (NativeImage | string) (可选) - 窗口图标。 在 Windows 上推荐使用 ICO 图标来获得最佳的视觉效果, 默认使用可执行文件的图标.
            frame: true,       // boolean (可选) - 设置为 false 时可以创建一个无边框窗口 默认值为 true。
            webPreferences:{
                preload:path.join(__dirname,"Preload.js") //string (可选) -在页面运行其他脚本之前预先加载指定的脚本，脚本路径为文件的绝对路径。
            }
        } );
        this.mainWindow.removeMenu(); // 删除窗口的菜单栏。
        this.mainWindow.webContents.openDevTools();
        // mainWindow.loadFile('web-mobile/index.html');
        this.mainWindow.loadURL('http://localhost:7456/');
        
    }



    /** 设置是否全屏回调 */
    public onSetFullScreen(event, bool) {
        if (this.mainWindow) {
            this.mainWindow.setFullScreen(bool);
        }
    }

    public async onSaveJson(event, info) {
        let outputData = JSON.stringify(info);
        let url = path.join(__dirname,`../saveData/hhhhh${Date.now()}.json`);
        try {
            await fs.writeFileSync(url, outputData);
        } catch (err) {
            console.log("保存配置异常", err);
            return false;
        }
        return true;
    }

    public async handleFileOpen() {
        let { canceled, filePaths } = await dialog.showOpenDialog(this.mainWindow,null);
        console.log("aaaaa:", canceled, filePaths)
        if (canceled) {
            return
        } else {
            return filePaths[0];
        }
    }


    public async  getConfig() {
        let { canceled, filePaths } = await dialog.showOpenDialog(this.mainWindow,null);
        if (canceled) {
            return;
        } else {
            let url = filePaths[0];
            if(path.extname(url).toLowerCase() != ".json"){
                let result:number = await dialog.showMessageBoxSync(
                    {
                        title:"提示",
                        message:"请选择json配置",
                        buttons:["是"],
                    }
                )
                return;
            }
            let jsonFile = await fs.readFileSync(url);
            let jsonstr = jsonFile.toString();
            return {url:url,data:jsonstr};
        }
    }

}


// 这段程序将会在 Electron 结束初始化和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
    // 创建窗口
    let main:Main = new Main();
    main.createWindow();

    ipcMain.on("set_full_screen",main.onSetFullScreen.bind(main));
    ipcMain.handle('dialog:openFile', main.handleFileOpen.bind(main));
    ipcMain.handle('dialog:saveJson', main.onSaveJson.bind(main));
    ipcMain.handle('dialog:getConfig', main.getConfig.bind(main));

    
})


// 当所有窗口都被关闭的时候退出程序。
app.on('window-all-closed', () => {
    app.quit()
})





